# Script para monitorar o ramdisk do squid
#       Criado por Graziele Borges de Souza (gbsouza@uoldiveo.com)
##      27/07/2011 - 17/08/2011
###     formata_ramdisk.sh
####
#####

# Verifica se o arquivo NÃ existe

if [ ! -e /tmp/watch_ramdisk ]; then
        echo "100" > /tmp/watch_ramdisk
fi

# Declara as variáis

USAGE=`df -h /export/cache/ramdisk | grep ramdisk | awk {'print $5'} | cut -d % -f 1`
VALOR=`cat /tmp/watch_ramdisk`
VERIFICA_SQUID=`ps auxwww | grep /opt/squid/etc/squid-1.conf | grep -v grep -c`
VERIFICA_MOUNT=`df -h | grep -c ramdisk`
LIMITE=100
DATA=`date`
DATA_LOG=`date +%H:%M`
Log1=`grep $DATA_LOG /export/logs/squid/squid_cache-1.log | grep -ci "No space left on device"`
Log2=`grep $DATA_LOG /export/logs/squid/squid_cache-1.log | grep -ci "Operation not permitted"`

#Função de formatar e refazer o cache do squid

Formata () {

        /etc/init.d/squid stop

        i=0
        while [ $VERIFICA_SQUID -eq 2 ]; do
                if [ $i -eq 10 ]; then
                        killall -9 squid
                fi
                sleep 5
                VERIFICA_SQUID=`ps auxwww | grep /opt/squid/etc/squid-1.conf | grep -v grep -c`
                let i++
        done

        umount /export/cache/ramdisk

        i=0
        while [ $VERIFICA_MOUNT -eq 1 ]; do
                if [ $i -eq 10 ]; then
                        fuser -k /export/cache/ramdisk
                        umount -f /export/cache/ramdisk
                fi
                sleep 2
                VERIFICA_MOUNT=`df -h | grep -c ramdisk`
                let i++
        done

        /etc/init.d/ramdisk

        /opt/squid/sbin/squid -z -f /opt/squid/etc/squid-1.conf

        /etc/init.d/squid start

        echo $USAGE > /tmp/watch_ramdisk
}

#Corpo do script com as validaçs


case $1 in

        --cron)

                if [ $VALOR -eq $LIMITE ]; then
                        if [ $USAGE -eq $LIMITE ]; then

                                Formata
								
				echo "Executei como $1 em $DATA" >> /export/logs/formata_ramdisk.log

                        fi
				
		echo $USAGE > /tmp/watch_ramdisk
				
		else								
			
			echo $USAGE > /tmp/watch_ramdisk

               	fi
			
		if [ $Log1 -eq 1 ]; then
		
			Formata
					
			echo "Executei como $1 em $DATA apresentando o erro No space left on device" >> /export/logs/formata_ramdisk.log
										
		elif [ $Log2 -eq 1 ]; then
				
			Formata
					
			echo "Executei como $1 em $DATA apresentando o erro Operation not permitted" >> /export/logs/formata_ramdisk.log
					
		fi

                ;;

        --force)

                Formata

                echo "Executei como $1 em $DATA" >> /export/logs/formata_ramdisk.log

                ;;

        *)
                echo "Utilizaç: $0  [--cron | --force]"
                echo "$0 --cron: Executa utilizando os parametros de monitoraç."
                echo "$0 --force: Efetua a formataç do cache e rebuild independente do status do ramdisk."

                ;;
esac
